package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"strconv"
	"strings"
)

func upload(conn net.Conn, path string) {
	fmt.Println("文件上传开始，path:", path)
	// 打开文件
	uploadFile, _ := os.Open(path)
	fmt.Println("uploadFile", uploadFile)

	// 获取文件信息
	f, _ := os.Stat(path)
	fileSize := f.Size()
	fileName := f.Name()
	fmt.Println("name:", fileName)
	fmt.Println("size:", fileSize)

	Info := "put" + " " + fileName + " " + strconv.FormatInt(fileSize, 10)
	fmt.Println("fileInfo:", Info)
	// 上传文件的文件名和大小
	conn.Write([]byte(Info))

	// 循环上传文件数据
	reader := bufio.NewReader(uploadFile)
	for true {
		// 读取文件每一行
		lineContent, err := reader.ReadBytes('\n')
		// 发送给服务端
		conn.Write(lineContent)

		if err == io.EOF {
			break
		}

	}

	fmt.Println("文件上传成功！")

}

func download(conn net.Conn, path string) {

}

func main() {

	// （1）拨号获取客户端的套接字对象,建立连接
	conn, err := net.Dial("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("err", err)
	}
	fmt.Println(conn)

	// （2）收发消息
	for true {

		// 文件上传的实现
		reader := bufio.NewReader(os.Stdin)
		fmt.Print("请输入命令：")
		content, _ := reader.ReadString('\n')
		content = strings.TrimSpace(content)
		fmt.Println("content", content)

		cmd := strings.Split(content, " ")[0]
		params := strings.Split(content, " ")[1]

		switch cmd {
		case "put":
			// 文件上传
			upload(conn, params)
		case "get":
			// 文件下载功能
			download(conn, params)

		}

	}

}
